package View.Cadastros;

import Model.ProdutoModel;
import Repositories.ProdutoRepository;
import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import org.netbeans.lib.awtextra.AbsoluteLayout;

public class CadastroProduto extends javax.swing.JDialog {

    int IdProduto = 0;
    boolean editar = false;
    ProdutoRepository produtoRepository = new ProdutoRepository();

    /** Creates new form CadastroProduto */
    public CadastroProduto(java.awt.Dialog parent, boolean modal) {
        super(parent, modal);
        initComponents();

        AbsoluteLayout absoluto = null;
        jpn_cadastrar_produto.setLayout(absoluto);

        cbAtivo.setToolTipText("Marque apenas se tiver em estoque.");

        //bg cadastrar novo produto
        JLabel labelLogin = new JLabel(new ImageIcon("./img/bg_novo_produto.png"));
        jpn_cadastrar_produto.add(labelLogin);
        labelLogin.setBounds(0, 0, 450, 260);

        //bg bt SALVAR cadProdt
        JLabel label10 = new JLabel(new ImageIcon("./img/bt_save_cadProdt.png"));
        bt_Salvar.add(label10);
        bt_Salvar.setContentAreaFilled(false);
        bt_Salvar.setBorderPainted(false);
        bt_Salvar.setToolTipText("Salvar [Enter]");

        //bg bt CANCELAR cadProdt
        JLabel label11 = new JLabel(new ImageIcon("./img/bt_cancel_cadProdt.png"));
        bt_Cancelar.add(label11);
        bt_Cancelar.setContentAreaFilled(false);
        bt_Cancelar.setBorderPainted(false);
        bt_Cancelar.setToolTipText("Cancelar [Esc]");

        this.setLocationRelativeTo(null);
        //this.setResizable(false);  //pb aqui se ficar true, a jpainel fica maior que a png

        Enter();
        txtDescricao.grabFocus();
    }

    public CadastroProduto(java.awt.Dialog parent, boolean modal, int IdProduto) {
        super(parent, modal);
        initComponents();

        AbsoluteLayout absoluto = null;
        jpn_cadastrar_produto.setLayout(absoluto);

        cbAtivo.setToolTipText("Marque apenas se tiver em estoque.");

        //bg cadastrar novo produto
        JLabel labelLogin = new JLabel(new ImageIcon("./img/bg_alterar_produto.png"));
        jpn_cadastrar_produto.add(labelLogin);
        labelLogin.setBounds(0, 0, 450, 260);

        //bg bt SALVAR cadProdt
        JLabel label10 = new JLabel(new ImageIcon("./img/bt_save_cadProdt.png"));
        bt_Salvar.add(label10);
        bt_Salvar.setContentAreaFilled(false);
        bt_Salvar.setBorderPainted(false);
        bt_Salvar.setToolTipText("Salvar [Enter]");

        //bg bt CANCELAR cadProdt
        JLabel label11 = new JLabel(new ImageIcon("./img/bt_cancel_cadProdt.png"));
        bt_Cancelar.add(label11);
        bt_Cancelar.setContentAreaFilled(false);
        bt_Cancelar.setBorderPainted(false);
        bt_Cancelar.setToolTipText("Cancelar [Esc]");


        Enter();

        this.IdProduto = IdProduto;

        txtDescricao.grabFocus();
        this.editar = true;
        this.setLocationRelativeTo(null);
        IniciarProduto();
    }

    private void Enter() {
        HashSet conj = new HashSet(txtDescricao.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
        conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
        txtDescricao.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);

        HashSet conj2 = new HashSet(txtValor.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
        conj2.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
        txtValor.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj2);

    }

    private void IniciarProduto() {
        try {
            ProdutoModel produto = produtoRepository.getUsuario(this.IdProduto);
            if (produto != null) {
                if (produto.getPRODUTO_ATIVO().equals("A")) {
                    cbAtivo.setSelected(true);
                } else {
                    cbAtivo.setSelected(false);
                }

                txtDescricao.setText(produto.getPRODUTO_DESCRICAO());
                txtValor.setText(produto.getPRODUTO_VALOR().toString());
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    private void Salvar() {
        try {
            if (ChecarCampos()) {
                ProdutoModel produtoModel = new ProdutoModel();
                if (cbAtivo.isSelected()) {
                    produtoModel.setPRODUTO_ATIVO("A");
                } else {
                    produtoModel.setPRODUTO_ATIVO("I");
                }

                produtoModel.setPRODUTO_DESCRICAO(txtDescricao.getText());
                produtoModel.setPRODUTO_VALOR(Double.parseDouble(txtValor.getText()));

                if (produtoRepository.Salvar(produtoModel)) {
                    JOptionPane.showMessageDialog(null, "Produto inserido com sucesso!");

                    txtDescricao.setText("");
                    txtValor.setText("");
                    cbAtivo.setSelected(true);
                    txtDescricao.grabFocus();
                    
                }
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    private void Alterar() {
        try {
            if (ChecarCampos()) {
                ProdutoModel produtoModel = new ProdutoModel();
                if (cbAtivo.isSelected()) {
                    produtoModel.setPRODUTO_ATIVO("A");
                } else {
                    produtoModel.setPRODUTO_ATIVO("I");
                }

                produtoModel.setPRODUTO_ID(this.IdProduto);
                produtoModel.setPRODUTO_DESCRICAO(txtDescricao.getText());
                produtoModel.setPRODUTO_VALOR(Double.parseDouble(txtValor.getText()));

                if (produtoRepository.Alterar(produtoModel)) {
                    JOptionPane.showMessageDialog(null, "Produto alterado com sucesso!");
                    this.dispose();
                }
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    private boolean ChecarCampos() {
        if (txtDescricao.equals("")) {
            JOptionPane.showMessageDialog(null, "É obrigatório preencher o campo Descrição!");
            return false;
        } else if (txtValor.equals("") || txtValor.equals("0")) {
            JOptionPane.showMessageDialog(null, "É obrigatório preencher o campo Valor!");
            return false;
        } else {
            return true;
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jpn_cadastrar_produto = new javax.swing.JPanel();
        bt_Salvar = new javax.swing.JButton();
        bt_Cancelar = new javax.swing.JButton();
        cbAtivo = new javax.swing.JCheckBox();
        txtDescricao = new javax.swing.JTextField();
        txtValor = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jpn_cadastrar_produto.setBackground(new java.awt.Color(153, 255, 153));
        jpn_cadastrar_produto.setPreferredSize(new java.awt.Dimension(450, 260));
        jpn_cadastrar_produto.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        bt_Salvar.setAlignmentY(0.0F);
        bt_Salvar.setBorder(null);
        bt_Salvar.setContentAreaFilled(false);
        bt_Salvar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                bt_SalvarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                bt_SalvarMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                bt_SalvarMousePressed(evt);
            }
        });
        bt_Salvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_SalvarActionPerformed(evt);
            }
        });
        jpn_cadastrar_produto.add(bt_Salvar, new org.netbeans.lib.awtextra.AbsoluteConstraints(160, 130, 130, 60));

        bt_Cancelar.setAlignmentY(0.0F);
        bt_Cancelar.setBorder(null);
        bt_Cancelar.setContentAreaFilled(false);
        bt_Cancelar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                bt_CancelarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                bt_CancelarMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                bt_CancelarMousePressed(evt);
            }
        });
        bt_Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_CancelarActionPerformed(evt);
            }
        });
        bt_Cancelar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                bt_CancelarKeyPressed(evt);
            }
        });
        jpn_cadastrar_produto.add(bt_Cancelar, new org.netbeans.lib.awtextra.AbsoluteConstraints(300, 130, 140, 60));

        cbAtivo.setSelected(true);
        cbAtivo.setText("Ativo");
        cbAtivo.setAlignmentY(0.0F);
        jpn_cadastrar_produto.add(cbAtivo, new org.netbeans.lib.awtextra.AbsoluteConstraints(377, 42, -1, -1));

        txtDescricao.setFont(new java.awt.Font("Tahoma", 1, 14));
        txtDescricao.setAlignmentX(0.0F);
        txtDescricao.setAlignmentY(0.0F);
        jpn_cadastrar_produto.add(txtDescricao, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, 418, 34));

        txtValor.setFont(new java.awt.Font("Tahoma", 1, 14));
        txtValor.setAlignmentX(0.0F);
        txtValor.setAlignmentY(0.0F);
        jpn_cadastrar_produto.add(txtValor, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 140, 139, 34));

        jLabel2.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel2.setText("Valor:");
        jLabel2.setAlignmentY(0.0F);
        jpn_cadastrar_produto.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 116, 61, 20));

        jLabel1.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel1.setText("Descrição:");
        jLabel1.setAlignmentY(0.0F);
        jpn_cadastrar_produto.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 45, 77, 20));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jpn_cadastrar_produto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jpn_cadastrar_produto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void bt_SalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_SalvarActionPerformed
    if (this.editar == false) {
        Salvar();
    } else {
        Alterar();
    }
}//GEN-LAST:event_bt_SalvarActionPerformed

private void bt_CancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_CancelarActionPerformed
    this.dispose();
}//GEN-LAST:event_bt_CancelarActionPerformed

//-----------FECHAR  xxxxxxxxxxxxxxxxxxxxxxx
private void bt_CancelarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_bt_CancelarKeyPressed
    // TODO add your handling code here:
}//GEN-LAST:event_bt_CancelarKeyPressed

//--------------SALVAR-SALVAR-SALVAR-SALVAR-SALVAR-SALVAR-SALVAR-SALVAR-SALVAR
private void bt_SalvarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_SalvarMouseEntered
}//GEN-LAST:event_bt_SalvarMouseEntered

private void bt_SalvarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_SalvarMouseExited
}//GEN-LAST:event_bt_SalvarMouseExited

private void bt_SalvarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_SalvarMousePressed
}//GEN-LAST:event_bt_SalvarMousePressed

//----------------CANCELAR
private void bt_CancelarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_CancelarMouseEntered
}//GEN-LAST:event_bt_CancelarMouseEntered

private void bt_CancelarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_CancelarMouseExited
}//GEN-LAST:event_bt_CancelarMouseExited

private void bt_CancelarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_bt_CancelarMousePressed
}//GEN-LAST:event_bt_CancelarMousePressed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(CadastroProduto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(CadastroProduto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(CadastroProduto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(CadastroProduto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the dialog */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bt_Cancelar;
    private javax.swing.JButton bt_Salvar;
    private javax.swing.JCheckBox cbAtivo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jpn_cadastrar_produto;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtValor;
    // End of variables declaration//GEN-END:variables
}
